﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSysWeb;
using System.Data.SqlClient;

namespace DAL_MechSysWeb
{
    public class DALOrdemPendente : DALBase
    {
        private DTOOrdemPendente CriarOrdem(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOOrdemPendente dtoOrdemPendente = new DTOOrdemPendente();


                if (!string.IsNullOrEmpty(sqlDataReader["OrdemPendenteID"].ToString()))
                {
                    dtoOrdemPendente.OrdemPendenteID = (int)sqlDataReader["OrdemPendenteID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["ClienteID"].ToString()))
                {
                    dtoOrdemPendente.ClienteID = (int)sqlDataReader["ClienteID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["VeiculoID"].ToString()))
                {
                    dtoOrdemPendente.VeiculoID = (int)sqlDataReader["VeiculoID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataEntrada"].ToString()))
                {
                    dtoOrdemPendente.DataEntrada = (DateTime)sqlDataReader["DataEntrada"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["PrevisaoEntrega"].ToString()))
                {
                    dtoOrdemPendente.PrevisaoEntrega = (DateTime)sqlDataReader["PrevisaoEntrega"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataEntrega"].ToString()))
                {
                    dtoOrdemPendente.DataEntrega = (DateTime)sqlDataReader["DataEntrega"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Resumo"].ToString()))
                {
                    dtoOrdemPendente.Resumo = (string)sqlDataReader["Resumo"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Descricao"].ToString()))
                {
                    dtoOrdemPendente.Descricao = (string)sqlDataReader["Descricao"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Prioridade"].ToString()))
                {
                    dtoOrdemPendente.Prioridade = (int)sqlDataReader["Prioridade"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["status"].ToString()))
                {
                    dtoOrdemPendente.status = (bool)sqlDataReader["status"];
                }

                return dtoOrdemPendente;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public int BuscarNumOrdensPendentesPorClienteID(int clienteID)
        {
            int numVeiculos = 0;

            try
            {
                string storedProssidere = "sp_Web_BuscarNumOrdensPendentesPorClienteID";

                SqlParameter[] parameters =
            {
                new SqlParameter("@clienteID", clienteID)               
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        numVeiculos = Int32.Parse(sqlDataReader["NumRegistros"].ToString());
                    }
                }

                return numVeiculos;

            }
            catch (Exception)
            {
                throw;
            }
        }

        public int BuscarNumOrdensPendentes()
        {
            int numVeiculos = 0;

            try
            {
                string storedProssidere = "sp_Web_BuscarNumOrdensPendentes";           

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    if (sqlDataReader.Read())
                    {
                        numVeiculos = Int32.Parse(sqlDataReader["NumRegistros"].ToString());
                    }
                }

                return numVeiculos;

            }
            catch (Exception)
            {
                throw;
            }
        }

        public int BuscarNumTotalServicosPorOrdemID(int ordemPendenteID)
        {
            int numTotal = 0;

            try
            {
                string storedProssidere = @"SELECT Count(os.OrdemDetalheServicoID) as NumServicos 
FROM OrdemPendente op INNER JOIN OrdemDetalheServico os ON op.OrdemPendenteID = os.OrdemPendenteID
WHERE op.OrdemPendenteID = "+ordemPendenteID+"";
               
              
                using (SqlDataReader sqlDataReader = ExecuteReaderQuery(storedProssidere))
                {
                    if (sqlDataReader.Read())
                    {
                        numTotal = Int32.Parse(sqlDataReader["NumServicos"].ToString());
                    }
                }

                return numTotal;

            }
            catch (Exception)
            {
                throw;
            }
        }

        public int BuscarNumServicosConcluidosPorOrdemID(int ordemPendenteID)
        {
            int numConcluidos = 0;

            try
            {
                string storedProssidere = @"SELECT Count(os.OrdemDetalheServicoID) as NumServicosConcluidos 
FROM OrdemPendente op INNER JOIN OrdemDetalheServico os ON op.OrdemPendenteID = os.OrdemPendenteID
WHERE os.status = 'True' AND op.OrdemPendenteID = " + ordemPendenteID + "";
             
                using (SqlDataReader sqlDataReader = ExecuteReaderQuery(storedProssidere))
                {
                    if (sqlDataReader.Read())
                    {
                        numConcluidos = Int32.Parse(sqlDataReader["NumServicosConcluidos"].ToString());
                    }
                }

                return numConcluidos;

            }
            catch (Exception)
            {
                throw;
            }
        }

        public DTOOrdemPendente BuscarOrdemPendentePorOrdemID(int ordemPendenteID)
        {
            DTOOrdemPendente dtoOrdemPendente = null;

            try
            {
                string storedProssidere = "sp_Web_BuscarOrdemPendentePorOrdemID";
                SqlParameter[] parameters =
                        {                    
                           new SqlParameter("@ordemPendenteID", ordemPendenteID)                                    
                        };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {

                        dtoOrdemPendente = CriarOrdem(sqlDataReader);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }

            return dtoOrdemPendente;
        }

        public List<DTOOrdemPendente> BuscarOdensPendentesPorClienteID(int clienteID)
        {
            List<DTOOrdemPendente> lstOrdens = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_Web_BuscarOrdensPendentesPorClienteID";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@clienteID", clienteID)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOOrdemPendente dtoOrdemPendente;

                        dtoOrdemPendente = CriarOrdem(sqlDataReader);

                        lstOrdens.Add(dtoOrdemPendente);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstOrdens;

        }

        public List<DTOOrdemPendente> BuscarOrdensPendentes()
        {
            List<DTOOrdemPendente> lstOrdens = new List<DTOOrdemPendente>();

            try
            {
                string storedProssidere = "sp_Web_BuscarOrdensPendentes";

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOOrdemPendente dtoOrdemPendente = CriarOrdem(sqlDataReader);

                        lstOrdens.Add(dtoOrdemPendente);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }

            return lstOrdens;
        }




    }
}
